package com.yonyou.brigade.basic_init.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.service.IService;
import com.yonyou.brigade.basic_init.enums.OpenTypeEnum;
import com.yonyou.brigade.basic_init.model.BriChannel;
import com.yonyou.brigade.basic_init.model.IChannelConfig;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author jiangzhf@yonyou.com
 * @since 2018-06-06
 */
public interface IBriChannelService extends IService<BriChannel> {
    List<BriChannel> getEnableChannelByEnable();
    List<BriChannel> getEnableChannelByTenant(String tenant);
    List<BriChannel> getEnableChannelByOrg(String orgpk);
    List<BriChannel> getEnableChannelByTenantAndChannel(String tenant,String channel);
    BriChannel getEnableChannelByOrgAndChannel(String orgpk,String channel);
    BriChannel getEnableInfoByTenantOrg(String tenant,String orgpk,String channel);
    List<BriChannel> getEnableChannelByChannel(String channel);
    List<BriChannel> getEnableChannelByChannelAndOpenType(String tenant, String channel, int openType);
//    void saveChannle(BriChannel briChannel);
    /**
     * 获取是否开通
     * @param channel   渠道 如rtpnr
     * @param tenant    租户
     * @param org   组织
     * @param extJson   其他信息
     * @return
     */
    public boolean isOpen(String channel,String tenant,String org,String extJson);


    /**
     * 获取某个租户下所有组织所开通的第三方信息
     * @param tenant
     * @param extJson
     * @return
     */
    public String tenantOpenChannels(String tenant,String extJson);

    /**
     * 开通某个租户的某个频道
     * @param tenant
     * @param channel
     * @param preApprove
     * @param orgPk
     * @param openType
     * @param phone
     * @param config
     */
    void openBriChannel(String tenant, String channel, int preApprove, String orgPk, OpenTypeEnum openType, String phone, IChannelConfig config);

    /**
     * 开通某个租户的某个频道
     * @param openType
     * @param briChannel
     */
    void openBriChannel(BriChannel briChannel, OpenTypeEnum openType);

    /**
     * 获取配置信息
     * @param tenant
     * @param channel
     * @param preApprove
     * @param orgPk
     * @param enable
     * @param openTypeEnum
     * @param channelConfig
     * @return
     */
    IChannelConfig getChannelConfig(String tenant,String channel,int preApprove, String orgPk,int enable,OpenTypeEnum openTypeEnum,IChannelConfig channelConfig);

    /**
     * 获取配置信息
     * @param tenant
     * @param channel
     * @param orgPk
     * @param enable
     * @param channelConfig
     * @return
     */
    IChannelConfig getChannelConfig(String tenant,String channel,String orgPk,int enable,IChannelConfig channelConfig);


    /**
     * 获取配置信息
     * @param tenant
     * @param channel
     * @param orgPk
     * @param channelConfig
     * @return
     */
    IChannelConfig getChannelConfig(String tenant,String channel,String orgPk,IChannelConfig channelConfig);

    /**
     * 获取配置信息
     * @param tenant
     * @param channel
     * @param channelConfig
     * @return
     */
    IChannelConfig getChannelConfig(String tenant,String channel,IChannelConfig channelConfig);
    /**
     * 查询所有开通商旅服务的渠道并去除重复的租户
     * @return List<BriChannel>
     */
    List<BriChannel> getDistinctEnableChannelGroupByTenant();
    /**
     * 根据用户信息（租户和组织）和渠道获取对应开通商旅服务的渠道
     * 1、按组织开通则返回对应租户及组织的渠道
     * 2、按租户开通则返回对应租户的渠道
     * @return BriChannel
     */
    BriChannel getEnableChannelByPersonTenantOrgAndChannel(String tenant, String orgPK, String channel);
    /**
     * 根据租户和渠道获取对应按租户开通商旅服务的渠道
     * @return BriChannel
     */
    BriChannel getEnableChannelByOpenType(String tenant, String channel, int openType);

    /**
     * 根据开通类型和租户获取开通的渠道
     * @param tenant
     * @param openType
     * @return
     */
    List<BriChannel> getEnableChannelByOpenTypeAndTenant(String tenant,int openType);

    /**
     * 根据开通类型,租户和组织获取开通的渠道
     * @param tenant
     * @param org
     * @param openType
     * @return
     */
    List<BriChannel> getEnableChannelByOpenTypeAndOrgAndTenant(String tenant,String org,int openType);

    /**
     *根据租户查询各组织渠道是否开通，返回开通的组织和没开通的组织
     *
     * @param params
     * @return
     */
    public JSONObject orgOpenUnopen(Map params);

    List<BriChannel> getEnableChannelByChannelAndOrgs(String tenantId, JSONArray orgs, String channel);

    /**
     * 根据租户，组织，渠道和开通方式查询开通信息
     * @param tenant
     * @param org
     * @param channel
     * @param openType
     * @return
     */
    BriChannel getEnableChannelByTenantAndOrgAndChannelAndOpenType(String tenant, String org, String channel, int openType);
}
